package cn.itsource.quartz.config;

import org.quartz.*;
import org.springframework.context.annotation.Bean;
/*
    spring容器：
           JobDetail +  Trigger


 */

//@Configuration
public class QuartzConfig {

    /* 用来描述 定时任务到底是做什么事情*/
    @Bean
    public JobDetail newJob(){
        return JobBuilder.newJob(PrintTimeJob.class)//PrintTimeJob我们的业务类
                .withIdentity("9527")//可以给该JobDetail起一个id
                //每个JobDetail内都有一个Map，包含了关联到这个Job的数据，在Job类中可以通过context获取
                .usingJobData("msg", "Hello Quartz")//关联键值对
                .storeDurably()//即使没有Trigger关联时，也不需要删除该JobDetail
                .build();
    }

    /*定时任务执行的时间
    *   Trigger：触发时间
    * */
    @Bean
    public Trigger printTimeJobTrigger() {
        /*
            SimpleTrigger：只能定义在什么时间 类似于 2021-07-25 11:00:00
               1.需求 每一周的周末 执行清理日志操作
               2.需求 每个月的月末 凌晨12 切换数据库
            CronTrigger：通过特殊的字符组成的表达式 来表示特定的时间和周期

         */

        //定义触发时间
        CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0/1 * * * * ? ");

        return TriggerBuilder.newTrigger()
                .forJob(newJob())//关联上述的JobDetail
                .withIdentity("quartzTaskService")//给Trigger起个名字
                .withSchedule(cronScheduleBuilder)
                .build();
    }



}
